
/**
 * HTTP请求方法
 */
export enum HttpMethod {
    GET = 'GET',
    POST = 'POST',
    PUT = 'PUT',
    DELETE = 'DELETE',
    PATCH = 'PATCH'
}

/**
 * 响应数据类型
 */
export enum HttpResponseType {
    JSON = 'json',
    TEXT = 'text',
    ARRAYBUFFER = 'arraybuffer',
    BLOB = 'blob'
}

/**
 * 请求配置接口
 */
export interface HttpRequestConfig {
    /** 请求URL */
    url: string;
    /** 请求方法 */
    method?: HttpMethod;
    /** 请求头 */
    headers?: Record<string, string>;
    /** 请求参数（GET）或请求体（POST） */
    data?: any;
    /** 超时时间（毫秒） */
    timeout?: number;
    /** 响应数据类型 */
    responseType?: HttpResponseType;
    /** 是否显示加载提示 */
    showLoading?: boolean;
    /** 重试次数 */
    retryCount?: number;
    /** 重试间隔（毫秒） */
    retryDelay?: number;
}

/**
 * 响应接口
 */
export interface HttpResponse<T = any> {
    /** 响应数据 */
    data: T;
    /** HTTP状态码 */
    status: number;
    /** 状态文本 */
    statusText: string;
    /** 响应头 */
    headers: Record<string, string>;
    /** 请求配置 */
    config: HttpRequestConfig;
}

/**
 * 错误接口
 */
export interface HttpErrorResponse {
    /** 错误信息 */
    message: string;
    /** 错误代码 */
    code?: string | number;
    /** HTTP状态码 */
    status?: number;
    /** 请求配置 */
    config: HttpRequestConfig;
    /** 原始错误 */
    originalError?: any;
}

/**
 * 拦截器接口
 */
export interface Interceptor<T> {
    /** 成功拦截器 */
    onFulfilled?: (value: T) => T | Promise<T>;
    /** 错误拦截器 */
    onRejected?: (error: any) => any;
}

/**
 * 请求拦截器
 */
export type RequestInterceptor = Interceptor<HttpRequestConfig>;

/**
 * 响应拦截器
 */
export type ResponseInterceptor = Interceptor<HttpResponse>;
